//
//  SQLiteManager.swift
//  test-FMDB
//
//  Created by wulei on 15/12/22.
//  Copyright © 2015年 wulei. All rights reserved.
//

import Foundation

// 数据库名称
private let dbName = "readme.db"
class SQLiteManager {
    
    // 单例
    static let  sharedManager = SQLiteManager()
    
    // 全局数据库操作队列
    let queue: FMDatabaseQueue
    
    private init() {
        

        var path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last!
        path = (path as NSString).stringByAppendingPathComponent(dbName)


        // 打开数据库队列
        
        // 如果数据库不存在,会先建立数据库,再创建队列并且打开数据库
        // 如果数据库存在,  会直接创建队列并且打开数据库
        queue = FMDatabaseQueue(path: path)
        print(path)
        
        createTable()
    }
    
    func execRecordSet(sql: String) -> [[String: AnyObject]] {
        
        var result = [[String: AnyObject]]()
        
        SQLiteManager.sharedManager.queue.inDatabase { (db) -> Void in
            guard let rs = db.executeQuery(sql) else {
                print("查询没有结果")
                return
            }
            
            
            while rs.next() {
                // 列数
                let colCount = rs.columnCount()
                
                // 创建字典
                var dict = [String: AnyObject]()
                
                for col in 0..<colCount {
                    // 列名
                    let name = rs.columnNameForIndex(col)
                    
                    // 值
                    let objc = rs.objectForColumnIndex(col)
                    
                    // 设置字典
                    dict[name] = objc
                    
                    
                }
                result.append(dict)
            }

        }
        return result
    }
    
    private func createTable() {
        let path = NSBundle.mainBundle().pathForResource("db.sql", ofType: nil)!
        let sql = try! String(contentsOfFile: path)
        
        queue.inDatabase { (db) -> Void in
            
            // 创建数据表的时候,最好选择 executeStatements ,可以执行多个SQL
            // 保证一次性创建所有的数据表
            
            if db.executeStatements(sql) {
                print("创表成功")
            }else {
                print("创表失败")
            }
        }
        
    }
    
    
    
}